// 模块四（业务模块）：负责处理具体路由业务的代码
// 处理路由 对应的业务逻辑

var fs = require('fs');
var path = require('path');
var quertstring = require('quertstring');

var config = require('./config.json');

// /index
module.exports.index = function (req, res) { 
    // 1. 读取 data.json 文件中的数据 并把数据转化为 list 数组
    readNewsData(function (list) {
        res.render(path.join(__dirname, 'views', 'index.html'), { list: list });
    });
}

// /submit
module.exports.submit = function (req, res) {
    // 读取submit 并返回
    res.render(path.join(__dirname,'views','submit.html'));
}

// /item
module.exports.item = function (req, res) {
    // 查找是否有 查询输入的id  对应的新闻
    readNewsData(function (list_news) {
        var model = null;
        for (var i = 0; i < list_news.length; i++) {
            // 如果有对应id的行文 则记录
            if (list_news[i].id.tostring() === req.query.id) {
                model = list_news[i];
                break;
            }
        }
        // 如果有对应的新闻 则通过模板 将其渲染到页面
        if (model) {
            res.render(path.join(__dirname, 'views', 'detail.html'), { item: model });
        } else {
            res.end("No Such Item");
        }
    });
}

// 处理 get 方式添加新闻
module.exports.addGet = function (req, res) {
    // 1. 读取data.json 文件的数据
    readNewsData(function(list){
        // 在吧 新闻添加到list之前 为新闻添加一个id属性
        req.query.id = list.length;
        // 想数组对象 list中 push一条新闻
        list.push(req.query);

        writeNewsData(JSON.stringify(list),function(){
            // 重定向
            res.setHead(202,'Found',{
                'Location':'/'
            });
            res.end();
        })
    })
}

// 处理 post 方式添加新闻
module.exports.addPost = function (req, res) {
    // 1. 读取data.json 文件的数据
    postBodyData(req,function(postData){
        postData.id = list.length;
        list.push(postData);

        writeNewsData(JSON.stringify(list),function(){
            res.setHead(302,'Found',{
                'Location':'/';
            });
            res.end();
        })
    })
}

// 处理 resources 中的静态资源
module.exports.staticSrc = function (req, res) {
    res.render(path.join(__dirname,req.url));
}

// 处理 404
module.exports.NotFound = function (req, res) {
    res.writeHead(404,'Not Found',{
        'Content-Type':'text/html; charsrt=utf-8'
    });
    res.end("404,Page Not Found");
}

// 读取data.json文件中的数据
function readNewsData(callback){
    fs.readFile(config.dataPath,'utf8',function(err,data){
        // 不是 找不到文件的错误
        if (err && err.code !== 'ENOENT') {
            throw err;
        }
        var list = JSON.parse(data || '[]');

        callback(list);
    })
}
// 向data.json 中写入数据
function writeNewsData(data,callback){
    fs.writeFile(config.dataPath,data,function(err){
        if (err) {
            throw err;
        }
        
        callback();
    })
}

// 接受post过来的数据
function postBodyData(req,callback){
    var array = [];

    req.on('data',function(){
        // 用数据 将post过来的buffer数据 储存起来
        array.push(chunk);
    });

    req.on('end',function(){
        // 将 buffer数组 转化成对象
        var postBody = Buffer.concat(array);
        // 转化成 string
        postBody = postBody.toString('utf8');
        // 转成 json对象
        postBody = quertstring.parse(postBody);

        callback(postBody);
    });
}